<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */

/**
 * Retrieves PHP script resource
 *
 * sets $php_resource to the returned resource
 * @param string $resource
 * @param string $resource_type
 * @param  $php_resource
 * @return boolean
 */

function smarty_core_get_php_resource(&$params, &$smarty) {
	
	$params ['resource_base_path'] = $smarty->trusted_dir;
	$smarty->_parse_resource_name ( $params, $smarty );
	
	/*
     * Find out if the resource exists.
     */
	
	if ($params ['resource_type'] == 'file') {
		$_readable = false;
		if (file_exists ( $params ['resource_name'] ) && is_readable ( $params ['resource_name'] )) {
			$_readable = true;
		} else {
			// test for file in include_path
			$_params = array ('file_path' => $params ['resource_name'] );
			require_once (SMARTY_CORE_DIR . 'core.get_include_path.php');
			if (smarty_core_get_include_path ( $_params, $smarty )) {
				$_include_path = $_params ['new_file_path'];
				$_readable = true;
			}
		}
	} else if ($params ['resource_type'] != 'file') {
		$_template_source = null;
		$_readable = is_callable ( $smarty->_plugins ['resource'] [$params ['resource_type']] [0] [0] ) && call_user_func_array ( $smarty->_plugins ['resource'] [$params ['resource_type']] [0] [0], array ($params ['resource_name'], &$_template_source, &$smarty ) );
	}
	
	/*
     * Set the error function, depending on which class calls us.
     */
	if (method_exists ( $smarty, '_syntax_error' )) {
		$_error_funcc = '_syntax_error';
	} else {
		$_error_funcc = 'trigger_error';
	}
	
	if ($_readable) {
		if ($smarty->security) {
			require_once (SMARTY_CORE_DIR . 'core.is_trusted.php');
			if (! smarty_core_is_trusted ( $params, $smarty )) {
				$smarty->$_error_funcc ( '(secure mode) ' . $params ['resource_type'] . ':' . $params ['resource_name'] . ' is not trusted' );
				return false;
			}
		}
	} else {
		$smarty->$_error_funcc ( $params ['resource_type'] . ':' . $params ['resource_name'] . ' is not readable' );
		return false;
	}
	
	if ($params ['resource_type'] == 'file') {
		$params ['php_resource'] = $params ['resource_name'];
	} else {
		$params ['php_resource'] = $_template_source;
	}
	return true;
}

/* vim: set expandtab: */

?>
